"""
文件名: SendMethod.py
作用: 封装请求的公共方法
作者: 健哥

根据接口文档,分析具体使用的方法
请求地址
请求方式: GET POST
请求参数:
    GET
        带请求参数: requests.get(url,params)
        不带请求参数: requests.get(url)
    POST
         -默认格式: requests.post(url,data)
         -JSON格式: requests.post(url,json)
         -无参数: requests.post(url)
返回值:
    response.json()
"""

import requests


class SendMethod:
    @staticmethod
    def send_method(method, url, params=None, data=None, json=None, headers=None):
        """
        封装发布会系统请求方式
        :param method: 请求方式 GET/POST
        :param url: 请求地址
        :param params: get请求的参数
        :param data: post请求的参数-->默认格式
        :param json: post请求的参数-->JSON格式
        :return:
        """
        # 封装请求方式
        if method.lower() == "get":
            if params is None:  # 如果请求方式为get,参数为空,直接请求url
                response = requests.get(url, headers=headers)
            else:
                response = requests.get(url, params=params, headers=headers)
        elif method.lower() == "post":  # 请求方式为post
            if data is not None:  # 如果post请求,data参数不为空
                response = requests.post(url=url, data=data, headers=headers)
            elif json is not None:
                response = requests.post(url=url, json=json, headers=headers)
            else:
                response = requests.post(url=url, headers=headers)
        else:
            print("请输入正确的请求方式:get/post")
            return None
        # 返回结果中包含: 状态码,响应体,响应头,请求头,响应时间
        result = dict()  # 结果数据类型为字典
        result['status_code'] = response.status_code  # 状态码
        result['body'] = response.json()  # 响应体
        result['headers'] = response.headers  # 响应头
        result['request_headers'] = response.request.headers  # 请求头
        result['response_time'] = int(response.elapsed.microseconds / 1000)  # 响应时间
        return result


if __name__ == '__main__':
    url = 'http://139.159.146.104:8082/admin/login'
    payload = {'username': 'admin', 'password': 'macro123'}
    print(SendMethod.send_method(method='post', url=url, json=payload))
